#ifndef xpack_macro_xenum_and
#define xpack_macro_xenum_and
#pragma push_macro("xuser")
#undef  xuser
#define xuser mixc::macro_xenum_and::inc
#include"define/base_type.hpp"
#include"meta/unsigned_type.hpp"
#pragma pop_macro("xuser")

#define xenum_and(TYPE)                                                 \
inline bool operator & (TYPE left, TYPE right){                         \
    using unsigned_t =                                                  \
        ::mixc::macro_xenum_and::inc::unsigned_type<TYPE>;              \
    return (u64(unsigned_t(left)) & u64(unsigned_t(right))) != 0;       \
}

#endif
